package tut.Map.weakHashMap.cacLoaireference.strong_ex1;

public class StrongRefDemo {
    public static class Something {
        protected void finalize() {
            System.out.println("Đây là lời của tôi trước khi vĩnh biệt");
        }
    }

    public static void main(String args[]) throws InterruptedException {
        Something strong = new Something();
        strong=null;
        System.gc();
        Thread.sleep(5000);  // Dòng này để trì hoãn không cho chương trình kết thúc ngay để ta có thể xem được kết quả thí nghiệm
        System.out.println("Mọi thứ kết thúc");
    }
}
/*
 Đây là lời của tôi trước khi vĩnh biệt
Mọi thứ kết thúc

Trong ví dụ trên, nếu có dòng strong=null thì đối tượng Something được tạo ra sẽ
không còn có strong reference dẫn đến nó, do đó khi đề nghị
Garbage Collector dọn dẹp bằng cách gọi lệnh System.gc() thì đối tượng Something sẽ bị dọn đi
 và trước khi nó bị dọn thì method finalize của nó được gọi, kết quả là câu "Đây là lời của tôi trước khi vĩnh biệt" được in ra.

Còn nếu không có dòng strong=null thì đối tượng Something được tạo ra vẫn còn có strong reference dẫn đến nó
 (nghĩa là nó là strongly reachable object), nên theo tính chất của strong reference,khi đề nghị Garbage Collector dọn dẹp bằng cách gọi lệnh System.gc(),
Garbage Collector sẽ KHÔNG dọn dẹp nó, vì vậy câu "Đây là lời của tôi trước khi vĩnh biệt" không được in ra.

*/